document.addEventListener('DOMContentLoaded', function() {
    // 获取DOM元素
    const urlInput = document.getElementById('urlInput');
    const generateBtn = document.getElementById('generateBtn');
    const resultSection = document.getElementById('resultSection');
    const qrcodeDiv = document.getElementById('qrcode');
    const downloadBtn = document.getElementById('downloadBtn');
    const copyBtn = document.getElementById('copyBtn');
    const displayUrl = document.getElementById('displayUrl');

    let currentQRCode = null;
    let currentUrl = '';

    // URL验证函数
    function isValidUrl(string) {
        try {
            // 移除开头的@符号
            string = string.replace(/^@/, '');
            
            // 如果没有协议，自动添加http://
            if (!string.match(/^https?:\/\//i)) {
                string = 'http://' + string;
            }

            // 直接使用encodeURI处理整个URL
            const encodedUrl = encodeURI(string);
            
            // 验证URL是否有效
            new URL(encodedUrl);
            return encodedUrl;
        } catch (error) {
            console.error('URL验证错误:', error);
            return false;
        }
    }

    // 显示消息
    function showMessage(message, type = 'success') {
        // 移除现有消息
        const existingMessage = document.querySelector('.success-message, .error-message');
        if (existingMessage) {
            existingMessage.remove();
        }

        const messageDiv = document.createElement('div');
        messageDiv.className = type === 'success' ? 'success-message' : 'error-message';
        messageDiv.textContent = message;
        
        resultSection.appendChild(messageDiv);

        // 3秒后自动移除消息
        setTimeout(() => {
            if (messageDiv.parentNode) {
                messageDiv.remove();
            }
        }, 3000);
    }

    // 设置加载状态
    function setLoadingState(isLoading) {
        const btnContent = generateBtn.querySelector('i');
        const btnText = generateBtn.childNodes[2] || generateBtn.lastChild;
        
        if (isLoading) {
            generateBtn.disabled = true;
            btnContent.className = 'loading';
            if (btnText) btnText.textContent = ' 生成中...';
        } else {
            generateBtn.disabled = false;
            btnContent.className = 'fas fa-magic';
            if (btnText) btnText.textContent = ' 生成二维码';
        }
    }

    // 生成二维码
    async function generateQRCode(url) {
        try {
            setLoadingState(true);
            
            // 检查QRCode库是否加载
            if (typeof QRCode === 'undefined') {
                throw new Error('QRCode库未加载，请检查网络连接');
            }
            
            // 清空之前的二维码
            qrcodeDiv.innerHTML = '';
            
            console.log('正在生成二维码，URL:', url);
            
            // 创建QRCode实例
            new QRCode(qrcodeDiv, {
                text: url,
                width: 280,
                height: 280,
                colorDark: '#333333',
                colorLight: '#ffffff',
                correctLevel: QRCode.CorrectLevel.H
            });

            console.log('二维码生成成功');
            
            // 获取生成的canvas元素
            currentQRCode = qrcodeDiv.querySelector('canvas');
            currentUrl = url;
            
            // 显示结果区域
            resultSection.classList.add('show');
            displayUrl.textContent = url;
            
            // 滚动到结果区域
            setTimeout(() => {
                resultSection.scrollIntoView({ behavior: 'smooth', block: 'start' });
            }, 100);
            
            showMessage('二维码生成成功！', 'success');
            
        } catch (error) {
            console.error('生成二维码时出错:', error);
            showMessage(`生成二维码时发生错误: ${error.message}`, 'error');
        } finally {
            setLoadingState(false);
        }
    }

    // 下载二维码
    function downloadQRCode() {
        if (!currentQRCode) {
            showMessage('请先生成二维码', 'error');
            return;
        }

        try {
            // 创建下载链接
            const link = document.createElement('a');
            link.download = 'qrcode.png';
            link.href = currentQRCode.toDataURL();
            
            // 触发下载
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
            
            showMessage('二维码下载成功！', 'success');
        } catch (error) {
            console.error('下载失败:', error);
            showMessage('下载失败，请重试', 'error');
        }
    }

    // 复制链接到剪贴板
    async function copyToClipboard() {
        if (!currentUrl) {
            showMessage('没有可复制的链接', 'error');
            return;
        }

        try {
            await navigator.clipboard.writeText(currentUrl);
            showMessage('链接已复制到剪贴板！', 'success');
        } catch (error) {
            // 如果现代API失败，使用传统方法
            try {
                const textArea = document.createElement('textarea');
                textArea.value = currentUrl;
                textArea.style.position = 'fixed';
                textArea.style.opacity = '0';
                document.body.appendChild(textArea);
                textArea.select();
                document.execCommand('copy');
                document.body.removeChild(textArea);
                showMessage('链接已复制到剪贴板！', 'success');
            } catch (fallbackError) {
                console.error('复制失败:', fallbackError);
                showMessage('复制失败，请手动复制链接', 'error');
            }
        }
    }

    // 处理生成按钮点击
    function handleGenerate() {
        const inputValue = urlInput.value.trim();
        
        if (!inputValue) {
            showMessage('请输入要转换的链接', 'error');
            urlInput.focus();
            return;
        }

        const validUrl = isValidUrl(inputValue);
        if (!validUrl) {
            showMessage('请输入有效的网址格式', 'error');
            urlInput.focus();
            return;
        }

        // 更新输入框显示为标准化的URL
        urlInput.value = validUrl;
        
        generateQRCode(validUrl);
    }

    // 事件监听器
    generateBtn.addEventListener('click', handleGenerate);
    
    downloadBtn.addEventListener('click', downloadQRCode);
    
    copyBtn.addEventListener('click', copyToClipboard);

    // 回车键生成二维码
    urlInput.addEventListener('keypress', function(e) {
        if (e.key === 'Enter') {
            handleGenerate();
        }
    });

    // 输入框焦点效果
    urlInput.addEventListener('focus', function() {
        this.parentElement.style.transform = 'scale(1.01)';
    });

    urlInput.addEventListener('blur', function() {
        this.parentElement.style.transform = 'scale(1)';
    });

    // 实时输入验证提示
    let validationTimeout;
    urlInput.addEventListener('input', function() {
        clearTimeout(validationTimeout);
        const value = this.value.trim();
        
        if (value) {
            validationTimeout = setTimeout(() => {
                const validUrl = isValidUrl(value);
                if (validUrl) {
                    this.style.borderColor = '#28a745';
                } else {
                    this.style.borderColor = '#dc3545';
                }
            }, 500);
        } else {
            this.style.borderColor = '#e1e5e9';
        }
    });

    // 预填充示例（开发测试用）
    if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
        urlInput.placeholder = '例如：https://www.baidu.com';
    }

    // 页面可见性API - 当页面重新获得焦点时清除旧消息
    document.addEventListener('visibilitychange', function() {
        if (!document.hidden) {
            const messages = document.querySelectorAll('.success-message, .error-message');
            messages.forEach(msg => {
                if (msg.parentNode) {
                    msg.remove();
                }
            });
        }
    });

    console.log('二维码生成器已就绪！');
}); 